Industrial robots perform a variety of tasks involving precise and repetitive movements and manipulations of physical objects with no or only minimal human intervention. For example, robots are used to spray-paint automobile parts, weld pieces together, and assemble electronic devices. Robots may also be used to pick up objects at a particular location, transport them to a destination location, and put them down in accordance with particular coordinates—e.g., stacking them or placing them into cardboard boxes present at the destination location. A typical industrial robot includes one or more arms with end-effectors designed for a specific tasks, and an associated computer-based controller.
Controllers for existing industrial robots are usually programmed in languages that specify exact positions and trajectories for the robot arm(s). During execution of a programmed task, the robot arm moves a reference coordinate associated with its most distal link to an exactly specified new position, following an exactly specified trajectory. The success of existing industrial robots is due to their operation in constrained environments, which allows the person programming the robot—who is usually involved in the process of structuring the robot's workspace—to predict, with high confidence, which objects will be present in the workspace at all times, and where they will be located. As a result, moving the reference point on the robot arm to particular coordinates, via particular trajectories, and then operating the end-effector (e.g., opening or closing a gripper of the robot), lead to real-world actions that achieve the specific task desired of the robot.
Programming conventional industrial robots generally demands a high level of technical expertise, and requires the user to think in terms understandable by the robot. For example, the programmer may use a six-dimensional vector to specify a reference point in three-dimensional space along with the orientation of the most distal link of the robot's arm. For a robot arm that has six or fewer degrees of freedom, that vector uniquely determines the settings for all the joints of the robot. If the robot arm has more than six degrees of freedom, further specification of the desired pose of the arm is required to remove any ambiguity.
Recent programming systems for industrial robots have user input layers that allow the programmer to circumvent the six-dimensional vectors by setting the end points of the trajectories by physically moving the arm to a desired pose and position and then causing the robot to record that position. In one approach, this is done by means of a remote, networked computer or an external teaching pendant (i.e., a handheld control terminal) that is plugged into the robot controller during a teaching phase. A teaching pendant usually includes an LCD screen, a joystick or similar steering device, one or more buttons, and sometimes a full keyboard (which may be a “soft” keyboard that pops up on a touch screen), which collectively allow the user to control and move the robot. Another technique involves equipping the most distal link of the robot arm with a load cell (optionally with a handle), and having the user switch the arm into a mode in which it responds to forces detected by the load cell, allowing the user to guide the robot arm to a desired position by hand. Typically, this requires, first, remotely switching the robot from an execution mode, in which it moves in accordance with previously programmed tasks, into a training mode, in which it is safe for the user to approach the robot. Second, the robot needs to be switched into guidable mode, where the user can freely move the robot arm around and record positions, e.g., by pushing a button on the teaching pendant.
Having taught the robot a position or trajectory in this manner, the programmer then provides explicit action commands to the robot. For example, if the task involves picking up an object, the programmer may need to specify the distance by which the robot has to lower its gripper, the width of the object or the requisite distance between the robot fingers for pick-up, and/or the force that the robot needs to apply to the object to hold it. This step, again, requires the programmer to break down even a task as simple as picking up an object into discrete steps, and supply precise parameter values for each step.
Once the robot has been properly programmed for a particular task, it can repeatedly and efficiently execute that task—but none other. Using the robot for a different task would essentially require re-programming it, which is a time-consuming and, thus, costly process. Similarly, any adjustments to the programmed task, such as a change in a pick-up or destination location, are cumbersome to implement as they would require overwriting previously entered parameters and/or repeating steps of the training process. Therefore, conventional industrial robots are typically designed and employed to perform highly specialized, value-adding tasks in a production process, where substantial investments in robot hardware and software are warranted by subsequent cost-savings through automation. More generic tasks that, though often monotonous to a human, have a degree of variability that renders their automation with conventional robots cost-ineffective, are usually left to human laborers.
Accordingly, there is a need for versatile robots that can easily and quickly be trained for new tasks, preferably without requiring special technical skills from the trainer.